package com.xbai.spark.core.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
  * sample(withReplacement, fraction, seed) 算子
  * 作用：以指定的随机种子随机抽样出数量为 fraction 的数据，
  * withReplacement 表示是抽出的数据是否放回，true 为有放回的抽样，false 为无放回的抽样，
  * seed 用于指定随机数生成器种子。
  *
  * 案例：创建一个RDD（1-10），从中选择放回和不放回抽样
 *
  * @author xbai
  * @Date 2020/12/28
  */
object Spark09_Sample {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("sample")
    val sc = new SparkContext(conf)

    val listRDD: RDD[Int] = sc.makeRDD(1 to 10)
    listRDD.collect().foreach(println)

    // 放回抽样
    val sampleRDD1: RDD[Int] = listRDD.sample(withReplacement = true, 0.4, 1)
    sampleRDD1.collect().foreach(println)

    // 不放回抽样
    val sampleRDD2: RDD[Int] = listRDD.sample(withReplacement = false, 0.4, 1)
    sampleRDD2.collect().foreach(println)
  }
}
